// 导入axios
import axios from 'axios'
// 引用Message消息提示函数
import { Message } from 'element-ui'

import store from '@/store'

import router from '@/router'
// 二次封装 = 创建axios实例
const request = axios.create({
  // 配置基地址
  baseURL: 'http://www.liulongbin.top:3008',
  // 超时5秒请求失败
  timeout: 50000
})

// 添加请求拦截器
request.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // 默认携带token值，节省以后的请求头代码量
    config.headers.Authorization = store.state.user.token
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)
let right = true
// 添加响应拦截器
request.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    // console.log(response)
    if (response.data.code === 0) {
      // Message.success('登陆成功')
    } else {
      Message.error(response.data.message + '请检查您的用户名和密码是否正确')
      return Promise.reject(response.data.message)
    }
    return response
  },
  async function (error) {
    // 对响应错误做点什么
    // 请求失败时（状态码不是 200），触发的回调函数，error 是“失败的结果”
    // token 失效
    if (error.response.status === 401) {
      // 通过自定义变量使代码不会重复执行，有一个端口报错执行一次报错即可
      if (right) {
        right = false
        Message.error('登陆过期，请重新登陆')
        // 清空 token
        await store.dispatch('user/logoutAction')
        // 跳转到登录页
        router.push('/login')
      }
    }

    return Promise.reject(error)
  }
)

// 导出二次封装好的 axios实例
export default request
